The rendering of digital images in software applications (e.g., video games, virtual reality applications, or the like) is a processor- and memory-consuming task. Further, with display devices offering unprecedented levels of resolution and/or software applications desirably offering more infinitesimal levels of detail (especially when the application allows the end user to “zoom in” or otherwise scale a digital image), techniques for generating and rendering images with high levels of detail, texture, and realism are highly desirable.
Conventional techniques, however, often call for simply increasing the size of the underlying image or texture map, creating memory-intensive images and maps. For instance, for a software application (e.g., a video game) that is designed for rendering on a 1080p display, to convert the image and texturing data to the next resolution level (4K) involves hard-coding color or texturing values that are many multiples the size of the 1080p counterpart. Conceivably, this could result in a 20 GB software application becoming undesirably large (potentially 2×0 the original size or greater), resulting in a loss in memory resources that would otherwise be available. The bandwidth cost and download time of such an application is also highly undesirable, both from a developer standpoint and a consumer standpoint.
Moreover, during production, conventional techniques based on material property maps (e.g., color maps or texture maps) do not allow artists or designers to quickly and easily alter the palette of those properties. For example, if a change in color is desired, an artist will typically have to revise or redraw the color map in a separate program that is outside of the game engine's material editor.
Accordingly, there exists a significant need for easily customizable mechanisms that allow high-resolution images to be rendered efficiently, with a high level of perceived detail, and/or without creating a large memory footprint.